﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entities;

namespace Interfaces
{
    public interface IHostedFileDAO
    {
        /// <summary>
        /// Загружает файл из базы данных
        /// </summary>
        /// <param name="id">ID файла</param>
        /// <returns>Загруженный объект файла</returns>
        HostedFile LoadHostedFile(int id);

        /// <summary>
        /// Проверка файла на существование в базе
        /// </summary>
        /// <param name="id">ID файла</param>
        /// <returns>true - файл найден, иначе - не найден</returns>
        bool HostedFileExists(int id);

        /// <summary>
        /// Добавляет новый файл в базу данных
        /// </summary>
        /// <param name="src">Объект для записи в базу</param>
        /// <returns>ID добавленного файла</returns>
        int AddHostedFile(HostedFile src);

        /// <summary>
        /// Изменяет загруженный файл
        /// </summary>
        /// <param name="src">Объект загруженного файла с ID изменяемого файла</param>
        void ModifyHostedFile(HostedFile src);

        /// <summary>
        /// Удаляет загруженный файл
        /// </summary>
        /// <param name="src">Объект загруженного файла с инициализированным ID</param>
        void RemoveHostedFile(HostedFile src);
        void RemoveHostedFile(int src);

        /// <summary>
        /// Получает список загруженных пользователем файлов
        /// </summary>
        /// <param name="id">ID пользователя</param>
        /// <returns>Список ID загруженных файлов</returns>
        List<int> GetHostedFilesForUser(int id);

        /// <summary>
        /// Удаляет запись о связи загруженного файла с пользователем
        /// </summary>
        /// <param name="src">ID файла</param>
        void UnlinkHostedFile(int src);

        /// <summary>
        /// Создает связь файла с пользователем
        /// </summary>
        /// <param name="file_id">ID файла</param>
        /// <param name="user_id">ID пользователя</param>
        void LinkHostedFile(int file_id, int user_id);
    }
}
